/*
 * Copyright (C) 2012 Square, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package retrofit2;

/**
 * Communicates responses from a server or offline requests. One and only one method will be invoked
 * in response to a given request.
 *
 * <p>Callback methods are executed using the {@link Retrofit} callback executor. When none is
 * specified, the following defaults are used:
 * Callback方法会使用 Retrofit的callback executor执行，当没有执行时，下面的会被默认使用
 * <ul>
 * <li>Android: Callbacks are executed on the application's main (UI) thread.
 * <li>JVM: Callbacks are executed on the background thread which performed the request.
 * </ul>
 *
 * @param <T> Successful response body type.
 */
public interface Callback<T> {
    /**
     * Invoked for a received HTTP response.
     * 当接受到Http响应时会被调用
     *
     * <p>Note: An HTTP response may still indicate（表明，象征） an application-level failure such as a 404 or 500.
     * Call {@link Response#isSuccessful()} to determine(确定) if the response indicates success.
     *
     * 一个Http响应可能会表明应用程序的登记失败 比如 404 500
     * 调用{@link Response#isSuccessful()} 去确定响应是否表明是成功的
     */
    void onResponse(Call<T> call, Response<T> response);

    /**
     * Invoked when a network exception occurred talking to the server or when an unexpected exception
     * occurred creating the request or processing the response.
     * 当网络发生错误或者出现未在预期内的错误时会调用到
     */
    void onFailure(Call<T> call, Throwable t);
}
